﻿
#include <iostream>
using namespace std;

//int main()
//{
//	int b = 0;
//	int& a = b;
//	int c = 1;
//
//	cout << a << endl;
//	cout << b << endl;
//	return 0;
//}

//void fun1(int& x)
//{
//	x++;
//}
//
//void swap(int& a, int& b)
//{
//	int tem = a;
//	a = b;
//	b = tem;
//}
//
//int main()
//{
//	int x = 1;
//	//fun1(x);
//	int a = 1;
//	int b = 0;
//	swap(a, b);
//
//	cout << a << endl;
//	cout << b << endl;
//	return 0;
//}

//#include<iostream>
//using namespace std;
//typedef int STDataType;
//typedef struct Stack
//{
//	STDataType* a;
//	int top;
//	int capacity;
//}ST;
//void STInit(ST& rs, int n = 4)
//{
//	rs.a = (STDataType*)malloc(n * sizeof(STDataType));
//	rs.top = 0;
//	rs.capacity = n;
//}
//// 栈顶
//void STPush(ST& rs, STDataType x)
//{
//	// 满了， 扩容
//	if (rs.top == rs.capacity)
//	{
//		printf("扩容\n");
//		int newcapacity = rs.capacity == 0 ? 4 : rs.capacity * 2;
//		STDataType* tmp = (STDataType*)realloc(rs.a, newcapacity *
//			sizeof(STDataType));
//		if (tmp == NULL)
//		{
//			perror("realloc fail");
//			return;
//		}
//		rs.a = tmp;
//		rs.capacity = newcapacity;
//	}
//	rs.a[rs.top] = x;
//	rs.top++;
//}
//
// //int STTop(ST& rs)
//int& STTop(ST& rs)
//{
//	return rs.a[rs.top-1];
//}

//int* STTop(ST* rs)
//{
//	return &(rs->a[rs->top - 1]);
//}

//int main()
//{
//	// 调⽤全局的
//	ST st1;
//	STInit(st1);
//	STPush(st1, 1);
//	STPush(st1, 2);
//	//*(STTop(&st1)) = 3;
//	STTop(st1) = 5;
//	//printf("%d", *(STTop(&st1)));
//	/*cout << STTop(st1) << endl;
//	STTop(st1) += 10;
//	cout << STTop(st1) << endl;*/
//	return 0;
//}


int main()
{
	const int a = 10;
	// 编译报错：error C2440: “初始化”: ⽆法从“const int”转换为“int &”
	// 这⾥的引⽤是对a访问权限的放⼤
	//int& ra = a;
	// 这样才可以
	const int& ra = a;
	// 编译报错：error C3892: “ra”: 不能给常量赋值
	//ra++;
	// 这⾥的引⽤是对b访问权限的缩⼩
	int b = 20;
	const int& rb = b;
	//引用完对b的权限无影响
	// 编译报错：error C3892: “rb”: 不能给常量赋值
	//rb++;
	return 0;
}